import router from './router/index'
import { isHttp } from '@/utils/validate'
import NProgress from "@/utils/progress";
import { getTokenCookie } from '@/utils/auth'
import useInfoStore from '@/stores/modules/use';
import usePermissionStore from '@/stores/modules/permission';

const whiteList = ['/login'];

// 导航前置守卫
router.beforeEach((to, form, next) => {
    NProgress.start();
    // 判断是否有token
    if (getTokenCookie()) {
        // 如果去登录页
        if (to.path === '/login') {
            next({ path: '/' })
            NProgress.done();
        } else if (whiteList.indexOf(to.path) !== -1) {
            // 如果去白名单
            next();
        } else {
            const { useInfo, getUseInfo } = useInfoStore()
            const { generateRoutes } = usePermissionStore()
            // 如果没有用户信息获取用户信息
            if (!useInfo?.name) {
                getUseInfo().then(() => {
                    // 获取完用户信息后，生成路由
                    generateRoutes().then(accessRoutes => {
                        // 根据权限生成可访问路由表
                        accessRoutes.forEach(route => {
                            if (!isHttp(route.path)) {
                                router.addRoute(route) // 动态添加可访问路由表
                            }
                        })
                        next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
                    })
                }).catch(() => {
                    next({ path: '/' })
                });
            } else {
                // 如果有用户信息，通过
                next();
            }
        }
    } else {
        if (whiteList.indexOf(to.path) !== -1) {   // 在免登录白名单，直接进入
            next()
        } else {
            next(`/login`) // 否则全部重定向到登录页
            NProgress.done()
        }
    }
});

// 导航的后置守卫
router.afterEach(() => {
    NProgress.done();
})
